How Spring Boot Auto Configuration Magic Works